// const http = uni.$tn.http
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)



let lifeData = {}
// 尝试获取本地是否存在lifeData变量，第一次启动时不存在
try {
	lifeData = uni.getStorageSync('lifeData')
} catch (e) {

}

// 标记需要永久存储的变量，在每次启动时取出，在state中的变量名
let saveStateKeys = ['vuex_user']

// 保存变量到本地存储
const saveLifeData = function(key, value) {
	// 判断变量是否在存储数组中
	if (saveStateKeys.indexOf(key) != -1) {
		// 获取本地存储的lifeData对象，将变量添加到对象中
		let tmpLifeData = uni.getStorageSync('lifeData')
		// 第一次启动时不存在，则放一个空对象
		tmpLifeData = tmpLifeData ? tmpLifeData : {},
			tmpLifeData[key] = value
		// 将变量再次放回本地存储中
		uni.setStorageSync('lifeData', tmpLifeData)
	}
}

const store = new Vuex.Store({
	state: {
		// 如果上面从本地获取的lifeData对象下有对应的属性，就赋值给state中对应的变量
		// 加上vuex_前缀，是防止变量名冲突，也让人一目了然
		vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {
			name: '图鸟'
		},

		// 如果vuex_version无需保存到本地永久存储，无需lifeData.vuex_version方式
		// app版本
		vuex_version: "1.0.0",
		// 是否使用自定义导航栏
		vuex_custom_nav_bar: true,
		// 状态栏高度
		vuex_status_bar_height: 0,
		// 自定义导航栏的高度
		vuex_custom_bar_height: 0,
		// 用户id
		token: null,
		hasLogin: false, //登录状态
		screenHeight: null,
		userInfo: uni.getStorageSync('userInfo')||null,
		userAction: uni.getStorageSync('userAction')||null
	},
	mutations: {
		$tStore(state, payload) {
			// 判断是否多层调用，state中为对象存在的情况，例如user.info.score = 1
			let nameArr = payload.name.split('.')
			let saveKey = ''
			let len = nameArr.length
			if (len >= 2) {
				let obj = state[nameArr[0]]
				for (let i = 1; i < len - 1; i++) {
					obj = obj[nameArr[i]]
				}
				obj[nameArr[len - 1]] = payload.value
				saveKey = nameArr[0]
			} else {
				// 单层级变量
				state[payload.name] = payload.value
				saveKey = payload.name
			}

			// 保存变量到本地中
			saveLifeData(saveKey, state[saveKey])
		},
		login(state, token) {
			state.hasLogin = true;
			state.token = token;
			uni.setStorage({ //token缓存用户登陆状态
				key: 'token',
				data: state.token
			})
		},
		logout(state) {
			state.token = null;
			state.hasLogin = false;
			uni.removeStorage({ //清除token缓存用户信息
				key: 'token'
			})
			uni.removeStorage({ //清除token缓存用户信息
				key: 'userInfo'
			})
			uni.removeStorage({ //清除token缓存用户信息
				key: 'refresh'
			})
		},
		removetoken(state) {
			state.token = null;
			uni.removeStorage({ //清除token缓存用户信息
				key: 'token'
			})
		},
		SCREENHEIGHT(state, hright) {
			state.screenHeight = hright
			console.log(state.screenHeight, 'state.screenHeight')
		},
		// 设置用户信息
		setUserInfo(state, userInfo) {
			state.userInfo = userInfo;
		},
		// 获取用户动作
		setUserAction(state, action) {
			state.userAction = action;
		}
	},
	actions: {
		// 异步获取用户信息
		fetchUserInfo({
			commit
		}) {
			return new Promise(async (resolve, reject) => {
				// 发送HTTP请求获取用户信息
				uni.$tn.http.get(`/api/system/user/user_info/`)
					.then(response => {
						const userInfo = response.data;
						commit('setUserInfo', userInfo);
						// 更新本地存储
						uni.setStorageSync('userInfo', userInfo);
						resolve(userInfo);
					})
					.catch(error => {
						reject(error);
					});
			});
		},
		// 异步获取用户信息
		fetchUserAction({
			commit
		}) {
			return new Promise(async (resolve, reject) => {
				// 发送HTTP请求获取用户信息
				uni.$tn.http.get(`/api/system/dance_action?page=1&limit=999`)
					.then(response => {
						const actionList = response.data;
						commit('setUserAction', actionList);
						// 更新本地存储
						uni.setStorageSync('userAction', actionList);
						resolve(actionList);
					})
					.catch(error => {
						reject(error);
					});
			});
		}
	},
	getters: {
		// 获取用户信息
		getUserInfo(state) {			
			return state.userInfo
		},
		// 获取动作
		getUserAction(state) {			
			return state.userAction
		}
	}
})

export default store